package com.pig4cloud.pigx.contract.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 合约模块订单枚举
 *
 * @date 2022/8/16 19:09
 */
public enum ContractOrderEnum {
	;

	/**
	 * 类型（0市价单、1限价单、2强平单）
	 */
	@Getter
	@AllArgsConstructor
	public enum Type {
		/**
		 * 0 市价单
		 */
		MARKET("市价单", "0"),
		/**
		 * 1 限价单
		 */
		LIMIT("限价单", "1"),
		/**
		 * 2 强平单
		 */
		LIQUIDATE("强平单", "2");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (Type item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (Type item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 方向（0开多、1开空）
	 */
	@Getter
	@AllArgsConstructor
	public enum Side {
		/**
		 * 0 做多
		 */
		MORE("多", "0"),
		/**
		 * 1 做空
		 */
		EMPTY("空", "1");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (Side item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (Side item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 操作类型（0开仓、1平仓）
	 */
	@Getter
	@AllArgsConstructor
	public enum OperationType {
		/**
		 * 0 开仓
		 */
		OPEN("开", "0"),
		/**
		 * 1 平仓
		 */
		CLOSE("平", "1");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (OperationType item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (OperationType item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

	/**
	 * 委托状态（0委托中、1部分成交、2部分已撤销、3完全成交、4已撤销、5已过期）
	 */
	@Getter
	@AllArgsConstructor
	public enum Status {
		/**
		 * 0 委托中
		 */
		ON_GOING("委托中", "0"),
		/**
		 * 1 部分成交
		 */
		PARTIAL_DEAL("部分成交", "1"),
		/**
		 * 2 部分已撤销 => 前端显示部分成交
		 */
		PARTIAL_CANCEL("部分成交", "2"),
		/**
		 * 3 完全成交
		 */
		DEAL("完全成交", "3"),
		/**
		 * 4 已撤销
		 */
		CANCEL("已撤销", "4"),
		/**
		 * 5 已过期
		 */
		EXPIRED("已过期", "5");

		private final String name;
		private final String value;

		/**
		 * 根据name查找对应value
		 *
		 * @param name 枚举名称
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findValue(String name) {
			for (Status item : values()) {
				if (item.getName().equals(name)) {
					return item.getValue();
				}
			}

			return null;
		}

		/**
		 * 根据value查找对应的name
		 *
		 * @param value 枚举值
		 * @return java.lang.String
		 *
		 * @date 2021/11/14
		 * @since 1.0.0
		 */
		public static String findName(String value) {
			for (Status item : values()) {
				if (item.getValue().equals(value)) {
					return item.getName();
				}
			}

			return null;
		}
	}

}
